from django.contrib import admin

from . import models
from celery_tasks.html.tasks import generate_static_list_search_html, generate_static_sku_detail_html


# Register your models here.

class GoodsCategoryAdmin(admin.ModelAdmin):
    """可以控制模型站点界面的显示,监听事件"""

    def save_model(self, request, obj, form, change):
        """
        当点击了站点中GoodsCategory的保存按钮时就会调用
        :param request: 本次保存时的请求对象
        :param obj: 当前要修改或保存的那个模型对象
        :param form: 本次提交的表单数据
        :param change: bool类型表示本次保存和之前数据有无区别(数据如果有改变就是True,否则False)
        :return: None
        """
        obj.save()
        generate_static_list_search_html.delay()  # 触发异步任务生成list.html文件

    def delete_model(self, request, obj):
        """
        当点击站点GoodsCategory删除按钮时会调用此方法
        :param request: 本次请求对象
        :param obj: 本次要删除的模型对象
        :return: None
        """
        obj.delete()
        generate_static_list_search_html.delay()  # 触发异步任务生成list.html文件


class SKUAdmin(admin.ModelAdmin):
    """sku模型站点管理类"""

    def save_model(self, request, obj, form, change):
        """
        当点击了站点中SKU的保存按钮时就会调用
        :param request: 本次保存时的请求对象
        :param obj: 当前要修改或保存的那个模型对象
        :param form: 本次提交的表单数据
        :param change: bool类型表示本次保存和之前数据有无区别(数据如果有改变就是True,否则False)
        :return: None
        """
        obj.save()
        generate_static_sku_detail_html.delay(obj.id)  # 触发异步任务生成sku.html文件

    def delete_model(self, request, obj):
        """
        当点击站点SKU删除按钮时会调用此方法
        :param request: 本次请求对象
        :param obj: 本次要删除的模型对象
        :return: None
        """
        obj.delete()
        generate_static_sku_detail_html.delay(obj.id)  # 触发异步任务生成sku.html文件


class SKUImageAdmin(admin.ModelAdmin):
    """sku图片站点模型管理类"""

    def save_model(self, request, obj, form, change):
        obj.save()
        generate_static_sku_detail_html.delay(obj.sku_id)

    def delete_model(self, request, obj):
        obj.delete()
        generate_static_sku_detail_html.delay(obj.sku_id)


admin.site.register(models.GoodsCategory, GoodsCategoryAdmin)
admin.site.register(models.GoodsChannel)
admin.site.register(models.Goods)
admin.site.register(models.Brand)
admin.site.register(models.GoodsSpecification)
admin.site.register(models.SpecificationOption)
admin.site.register(models.SKU, SKUAdmin)
admin.site.register(models.SKUSpecification)
admin.site.register(models.SKUImage, SKUImageAdmin)
